The present application relates to designing circuits, and more particularly, some embodiments related to tools used in designing and editing circuit schematics and circuit layouts.
Circuit designs are becoming much more complex, and the complexity in creating circuit designs has commensurately increased. In an effort to better deal with the difficulties in design, circuit designers use Electronic Design Automation (“EDA”) tools during the circuit design phase. EDA tools, also referred to as electronic computer aided design (“ECAD”) tools, reduce a circuit designer's effort in designing and editing circuit layouts. Typically, EDA tools are provided integrated design environments (“IDEs”) that have graphical user interfaces (“GUIs”). A graphical user interface (GUI) allows a circuit designer to create a circuit schematic or layout visually and interactively, by making commands and inputs through the tool's GUI. With a GUI, a designer can easily issue commands to the EDA tool and edit features and components of a circuit schematic or layout on a display canvas. Usually, the features and components appear on the canvas as various wires, boxes, shapes, polygons, etc., which represent the features and components of the displayed circuit.
Typically, when working with an EDA tool, a circuit designer uses layout commands to create and modify the circuit design. Generally, conventional EDA tool commands are not concerned with where on the canvas they are executed, and do not provide the designer with suggestions for the next possible steps for the command. As such, these layout commands, some of which are context-sensitive (also referred to as interactive commands), do not anticipate the circuit designer's intentions, and do not aid the user in selecting items of the circuit to act upon.
When using a conventional EDA tool in a large circuit, the circuit designer often has to add or modify objects in highly congested areas with many other objects displayed on the canvas. In these conditions, the designer often has to modify the view of the canvas with several zoom-in, zoom-out, and pan commands while using the commands that add or modify objects. That is, the designer often has to go from a “high-altitude” view of the circuit to a “low-altitude” view and back again to execute the desired task. For example, this can occur when a designer wants to move a circuit object close to another object on the same layer such that the edges of the two objects are spaced at some desired value. With conventional methods using the traditional move command, the designer selects the object, selects a reference point on the object, and moves the object to the destination point. However, during this process, the designer zooms in (increases the magnification of the display canvas) and pans to make the edges of the objects sufficiently visible to judge the desired spacing between the edges of the objects. Afterwards, the designer pans and zooms out to the prior view to continue the layout process. The need to zoom-in, pan, and zoom-out is disruptive to the designer's workflow and productivity. As a similar example, a circuit designer often needs to measure distances in a circuit layout using the ruler command. The conventional ruler command usually fixes the end points of the ruler at the locations where the user clicks the mouse button. In order to fix the end points accurately, the user zooms in and out and pans the view of the canvas to fix the end points, which is disruptive to the designer's workflow and productivity.